""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
" 文件名称: _vimrc
"
" 功能摘要: Vim的资源配置文件
"
" 创建时间: 2011-08-07 07:54
"
" 文件版本: 0.1
"
" 文件作者: llxwj@163.com llxwjlove@gmail.com
"
" Copyright (C) 2011 All rights reserved.
"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 修改记录: 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 操作系统的识别函数
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! MyOS()
  if has("win32")
    return "windows"
  else
    return "linux"
  endif
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 为了在Linux与Windows中配置文件完全相同,修改runtimepath环境变量.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if MyOS() == 'linux'
set runtimepath+=~/vimfiles
endif

set diffexpr=MyDiff()
function! MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      let cmd = '""' . $VIMRUNTIME . '\diff"'
      let eq = '"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 在msys2中的mintty中配置光标的形状,mintty中TERM环境变量名称还是xterm
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if exists('$MSYSTEM') 
	let &t_ti.="\e[1 q"
	let &t_SI.="\e[5 q"
	let &t_EI.="\e[1 q"
	let &t_te.="\e[0 q"
endif

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"                       所有新增的Vim配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 基本配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set number                           "显示行号
set tabstop=4                        "设置tab键的宽度[缩排宽度,默认是8](设置编辑时制表符占用空格数)
set shiftwidth=4                     "换行时行间交错使用4个空格,使用>>,和<<缩排命令时的宽度(设置格式化时制表符占用空格数) 
"set background=dark                  "配色方案
"colorscheme solarized                "颜色主题
colorscheme desert                   
"colorscheme molokai
"colorscheme phd
set nobackup                         "不产生备份文件 "设置无备份文件
set nowritebackup                    "不产生备份文件
set noundofile                       "不产生撤销文件
set backupdir=C:\tmp                 "设置备份文件存放的目录
set noswapfile                       "禁用swf交换文件
syntax enable                        "打开语法高亮
syntax on                            "打开文件类型侦测
"set textwidth=78                     "设置文本的宽度
set cursorline                       "高亮当前行
"hi cursorline guibg=blue             "当前行的背景色黑色
set colorcolumn=79                   "设置彩色列，当前彩色列是79列，整个编辑区域定义为78列
hi colorcolumn guibg=blue            "设置彩色列的颜色是浅绿色
set backspace=indent,eol,start       "allow backspacing over everything in insert mode
set mouse=a                          "启用鼠标
set selectmode+=mouse 
"set gcr=a:block-blinkon0             " 禁止光标闪烁
let mapleader = ","                  "设置命令前缀
filetype on                          "开启文件类型的自动检测
filetype indent on                   "针对不同的文件类型采用不同的缩进格式
filetype plugin on                   "针对不同的文件类型加载对应的插件
filetype plugin indent on            "启用自动补全
set noerrorbells                     "关闭提示音,没有警告音和视觉警告
set novisualbell                     "关闭提示音,没有警告音和视觉警告
set vb t_vb=                         "关闭提示音,没有警告音和视觉警告
set completeopt-=preview             "去掉全智能补全CTL-X CTRL-O中的预览窗口
if has("win32")
set guifont=Monaco:h14               "设置字体与字号
else
set guifont=Monaco\ 14               "设置字体与字号
endif
set autoindent                       "打开自动缩进
set cindent                          "打开 C/C++风格的自动缩进
set smartindent                      "设置智能自动缩进
set sessionoptions-=curdir           "session文件所在的目录自动成为当前工作目录
set sessionoptions+=sesdir           "session文件所在的目录自动成为当前工作目录
set dictionary+=$VIM/vimfiles/dict/english.dic  "设置英文词典文件ctrl-x_ctrl-k
set showmatch                        "显示括号配对情况
set hlsearch                         "开启高亮显示结果
set incsearch                        "开启实时搜索功能(搜索逐字符高亮)
set fo+=mB                           "打开断行模块对亚洲语言支持。m表示允许在
                                     "两个汉字之间断行，即使汉字之间没有出现空
									 "格。B表示将两行合并为一行的时候，汉字与
									 "汉字之间不要补空格。该命令支持的更多的选
									 "项请参看用户手册。
set list                             "显示Tab符，使用一高亮竖线代替
set listchars=tab:\|\ ,
set encoding=utf-8                  "受环境变量LANGUAGE的影响
set fileencoding=utf-8              "受环境变量LANGUAGE的影响
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set langmenu=zh_CN.UTF-8             "设置菜单的语言[不确认是否真正的起作用]
language messages zh_CN.utf-8        "解决consle输出乱码
source $VIMRUNTIME/delmenu.vim       "解决菜单乱码
source $VIMRUNTIME/menu.vim          "解决菜单乱码
set guitablabel=%{GuiTabLabel()}%N.%t "设置标签页行使用的标签的文本
if has("gui_running")
if has("win32")
    au GUIEnter * simalt ~x              "窗口启动时自动最大化
else
    au GUIEnter * call MaximizeWindow()
endif
function! MaximizeWindow()    
	silent !wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
endfunction
"winpos 20 20                        "指定窗口出现的位置，坐标原点在屏幕左上角
"set lines=20 columns=90             "指定窗口大小，lines为高度，columns为宽度
set guioptions-=m                    "隐藏菜单栏
set guioptions-=T                    "隐藏工具栏
"set guioptions-=L                   "隐藏左侧滚动条
"set guioptions-=r                   "隐藏右侧滚动条
"set showtabline=0                   "隐藏Tab栏
set guioptions+=c
set guioptions+=e
set guioptions-=b                    "隐藏底部滚动条
endif

"highlight WhitespaceEOL ctermbg=red guibg=red
"match WhitespaceEOL /\s\+$/
"highlight MoreSpace ctermbg=red guibg=red
"match MoreSpace /\s\{2\}/
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 不确定的配置选项
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"set gdefault                         "行内替换
"set helplang=cn                      "设置帮助文档的语言为中文
"set bsdir=buffer                     "设置工作目录为当前编辑文件的目录
"set clipboard+=unnamed               "use clipboard register '*' for all y, d, c, p ops
"set browsedir=buffer                 "use directory of the related buffer for file browser
"set viminfo+=!                       "make sure it can save viminfo
"set isk+=$,%,#,-                     "none of these should be word dividers
"set confirm                          "raise a dialog confirm whether to save changed buffer
"set ambiwidth=double
"set mousehide                        "如果打开，输入字符时隐藏鼠标指针。鼠标移动时恢复鼠标指针，缺省已经打开。 
"set ruler                            "总是在右下角显示光标位置的状态行
"set showcmd                          "显示命令
"set completeopt=longest,menu
"set expandtab                        "tab键转变为空格(将制表符扩展为空格)
"set smarttab                         "指定按一次backspace就删除shiftwidth宽度的空格
"set shiftround                       "when at 3 spaces, and I hit > ... go to 4, not 5
"set softtabstop=4                    "when hitting tab or backspace, how many spaces should a tab be (see expandtab)
                                      "让 vim 把连续数量的空格视为一个制表符
"set paste                            "关闭所有自动缩进
"set nopaste                          "重新打开原有的自动缩进设置
"set backspace=2                      "设置退格键可用
"set nowrapscan                       "搜索到文件两端时不重新搜索
"set cursorline                       "突出显示当前行
"set hidden                           "允许在有未保存的修改时切换缓冲区
"set autochdir                        "设定文件浏览器目录为当前目录
"set nowrap                           "设置不自动换行(禁止折行)
"set foldmethod=syntax                "选择代码折叠类型
"set foldlevel=100                    "禁止自动折叠
"set laststatus=2                     "开启状态栏信息
"set cmdheight=2                      "命令行的高度，默认为1，这里设为2
"set shortmess=atI                    "去掉欢迎界面
"set lz                               "当运行宏时,在命令执行完成之前,不重绘屏幕
"set whichwrap+=<,>,h,l               "退格键和方向键可以换行
"set ignorecase                       "搜索时忽略大小写
"set noswapfile                       "不使用swp文件，注意，错误退出后无法恢复
"set lbr                              "在breakat字符处而不是最后一个字符处断行
"set linebreak                        "避免折行时一个英文被分成两半
"set ignorecase smartcase             "智能搜索,搜索时全小写相当于不区分大小写，只要有一个大写字母出现则区分大小写
"set wildmenu         
"set nofen
"set fdl=10
"set history=400                      "vim记住的历史操作的数量，默认的是20
"set autoread                         "当文件在外部被修改时，自动重新读取
"set mouse=n                          "在所有模式下都允许使用鼠标，还可以是n,v,i,c等
"set foldenable                       "启用折叠
"set foldmethod=indent                "indent 折叠方式
"set foldmethod=marker                "marker 折叠方式
"set fileformat=unix                  "设置新文件的<EOL>格式
"set fileformats=unix,dos,mac         "给出文件的<EOL>格式类型
"自动切换目录为当前编辑文件所在目录
"au BufRead,BufNewFile,BufEnter * cd %:p:h
"每行超过80个的字符用下划线标示
"au BufRead,BufNewFile *.h,*.c,*.cpp,*.cc,*.java,*.vim,*.js,*.css,*.xml, 2match Underlined /.\%81v/
"第80列往后加下划线
"au BufWinEnter * let w:m2=matchadd('Underlined', '\%>' . 80 . 'v.\+', -1)
"字体,下面是一些字体配置样例，如果字体名称中有空格，可以用\对空格进行转义。
"set guifont=Courier_New:h12:cANSI
"set guifont=Courier_New:h10:cANSI
"set guifont=Lucida\ Console:h18
"set guifont=Lucida_Console:h9:cANSI
"set guifont=Lucida_Console:h11:b
"set guifont=Lucida\ Console:h14:cANSI
"set guifont=Bitstream\ Vera\ Serif:h16
"set guifont=DejaVu\ Sans\ Mono:h12:cANSI
"set guifontwide=Consolas:h12:cGB2312
"set guifontwide=YouYuan:h12:cGB2312
"set guifontwide=YaHei\ Consolas\ Hybrid:h10
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"自定义函数
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"添加源代码文件的文件头注释
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! SourceFileHeaderComment()
	call append( 0, "/********************************************************
				\*********************")
	call append( 1, " *")
	call append( 2, " * 文件名称: ".expand("%:t"))
	call append( 3, " *")
	call append( 4, " * 功能摘要: ")
	call append( 5, " *")
	call append( 6, " * 创建时间: ".strftime("%Y-%m-%d %H:%M"))
	call append( 7, " *")
	call append( 8, " * 文件版本: 0.1")
	call append( 9, " *")
	call append(10, " * 文件作者: ")
	call append(11, " *")
	call append(12, " * Copyright (C) ".strftime("%Y")." All rights reserved.")
	call append(13, " *")
	call append(14, " ********************************************************
				\*********************")
	call append(15, " *")
	call append(16, " * 修改记录: ")
	call append(17, " *")
	call append(18, " ********************************************************
				\********************/")
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"添加C语言头文件的文件头注释
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! CHeaderFileHeaderComment()
	if expand("%:e") != 'h'
	   return
    endif

	call append( 0, "/********************************************************
				\*********************")
	call append( 1, " *")
	call append( 2, " * 文件名称: ".expand("%:t"))
	call append( 3, " *")
	call append( 4, " * 功能摘要: ")
	call append( 5, " *")
	call append( 6, " * 创建时间: ".strftime("%Y-%m-%d %H:%M"))
	call append( 7, " *")
	call append( 8, " * 文件版本: 0.1")
	call append( 9, " *")
	call append(10, " * 文件作者: ")
	call append(11, " *")
	call append(12, " * Copyright (C) ".strftime("%Y")." All rights reserved.")
	call append(13, " *")
	call append(14, " ********************************************************
				\********************/")
	call append(15, "#ifndef __".toupper(expand("%:t:r"))."_H__")
   	call append(16, "#define __".toupper(expand("%:t:r"))."_H__")
	call append(17, "#endif /* __".toupper(expand("%:t:r"))."_H__ */") 
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"添加函数注释,要求输入函数的名称，然后插入函数的注释,目前不能实现自动读取函数
"名称与分析参数列表.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! FunctionComment()
	let function_name = input("请输入函数名称:")
	call append(line(".") + 0, "/*********************************************
				\********************************")
	call append(line(".") + 1, " *")
	call append(line(".") + 2, " * 函数: " . function_name)
	call append(line(".") + 3, " *")
	call append(line(".") + 4, " * 功能: ")
	call append(line(".") + 5, " *")
	call append(line(".") + 6, " * 参数: ")
    call append(line(".") + 7, " *")
	call append(line(".") + 8, " * 返回: ")
	call append(line(".") + 9, " *")
	call append(line(".") + 10, " ********************************************
				\********************************/")
	"echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 添加框架注释.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! FrameComment()
	let indent_value = indent(".")
	let start_comment = repeat("\t", indent_value / &tabstop)
	let start_comment .= "/"
	let start_comment .= repeat("*", &textwidth - indent_value - 1)
	let middle_comment = repeat("\t", indent_value / &tabstop)
	let middle_comment .= " * "
	let end_comment = repeat("\t", indent_value / &tabstop)
	let end_comment .= " "
	let end_comment .= repeat("*", &textwidth - indent_value - 2)
	let end_comment .= "/"

	let linenumber = line(".")
	call append(linenumber + 0, start_comment)
	call append(linenumber + 1, middle_comment)
	call append(linenumber + 2, end_comment)
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 添加重复的字符串[递增的数字序列]
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! IncreaseString()
	let string = input("请输入预格式化的字符串:")
	let numbers = input("请输入重复的次数:")
	let index = 0
	let number = str2nr(numbers)
	while index < number
		call append(line(".") + index, printf(string, index))
		let index = index + 1
	endwhile
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"加载会话
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! LoadSession()
	" execute project related configuration in current directory
	let current_dir_name = fnamemodify(getcwd(), ":t")
	if filereadable("workspace.vim")
		source workspace.vim
	endif 
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"保存工程配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! SaveProjectConfig()
	let project_name = fnamemodify(getcwd(), ":t")
	let session_name = project_name.".vim"
	let viminfo_name = project_name.".viminfo"
	exec "mksession! " . session_name
	exec "wviminfo!  " . viminfo_name
	echo "Save session file " . session_name
	echo "Save viminfo file " . viminfo_name
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"加载工程配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! LoadProjectConfig()
	let project_name = fnamemodify(getcwd(), ":t")
	let session_name = project_name.".vim"
	let viminfo_name = project_name.".viminfo" 
	if filereadable(session_name)
		echo "read session file " . session_name
		exec "source " . session_name
	else
		echo "no found session file " . session_name
	endif

	if filereadable(viminfo_name)
		echo "read viminfo file " . viminfo_name
		exec "rviminfo " . viminfo_name
	else
		echo "no found viminfo file " . viminfo_name 
	endif
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"快速的在当前的vim中打开新的TAB编辑资源文件,重新加载资源文件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! SwitchToBuf(filename)
    "let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
    " find in current tab
    let bufwinnr = bufwinnr(a:filename)
    if bufwinnr != -1
        exec bufwinnr . "wincmd w"
        return
    else
        " find in each tab
        tabfirst
        let tab = 1
        while tab <= tabpagenr("$")
            let bufwinnr = bufwinnr(a:filename)
            if bufwinnr != -1
                exec "normal " . tab . "gt"
                exec bufwinnr . "wincmd w"
                return
            endif
            tabnext
            let tab = tab + 1
        endwhile
        " not exist, new tab
        exec "tabnew " . a:filename
    endif
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 给标签页加上数字序号
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! GuiTabLabel()
	  let label = ''
	  let bufnrlist = tabpagebuflist(v:lnum)

	  " 如果标签页里有修改过的缓冲区，加上 '+'
	  for bufnr in bufnrlist
	    if getbufvar(bufnr, "&modified")
	      let label = '*'
	      break
	    endif
	  endfor

	  " 如果标签页里的窗口数目多于一，加上窗口数目
	  "let wincount = tabpagewinnr(v:lnum, '$')
	  "if wincount > 1
	  "  let label .= wincount
	  "endif
	  "if label != ''
	  "  let label .= ' '
	  "endif

	  " 附加缓冲区名
	  "return label . bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
	  return  label 
endfunction

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 按键映射
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"对选中文本按tab键向右进行缩排
nmap <tab>   v>
"对选中文件按shift+tab键向左进行缩排
nmap <s-tab> v<
"可视模式下对选中文件按tab键向右进行缩排
vmap <tab>   >gv
"可视模式下对选中文件按shift+tab键向左进行缩排
vmap <s-tab> <gv
"上一标签页
map <S-Left> :tabp<CR>
"下一标签页
map <S-Right> :tabn<CR>
"禁用鼠标中建(滚轮)的粘贴功能,双击,三击,四击功能
map  <MiddleMouse> <Nop>
map! <MiddleMouse> <Nop>
map  <2-MiddleMouse> <Nop>
map!  <2-MiddleMouse> <Nop>
map <3-MiddleMouse> <Nop>
map! <3-MiddleMouse> <Nop>
map <4-MiddleMouse> <Nop>
map! <4-MiddleMouse> <Nop>
""创建tags文件
"map <F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q<CR>
map <F12> :!ctags -R --fields=+lS<CR>  
	map <F11> :!ctags ./src/*.c ./inc/*.h --fields=+lS<CR>
" 显示vim的工作目录
nmap <silent> <leader>cwd :echo getcwd()<cr>
" 在Visual模式下快速给选中的字符串添加圆括号(
vmap ap "zdi(<C-R>z)<ESC>
"切换到全屏模式
map <F10> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR> 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" nmap <leader>erc :tabedit $MYVIMRC<cr>
" Fast reloading of the .vimrc
" Fast editing of .vimrc
" When .vimrc is edited, reload it
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <silent> <leader>erc :call SwitchToBuf($MYVIMRC)<cr>
nmap <leader>src :source $MYVIMRC<cr>
"autocmd! bufwritepost vimrc source $MYVIMRC

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 调用Source Insight
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nnoremap <silent> <F6> :!start "C:\Program Files\Source Insight 3\Insight3.exe" -i  +<C-R>=expand(line("."))<CR> %<CR>
nnoremap <silent> <F4> :!start "C:\Program Files\IDM Computer Solutions\UltraEdit\Uedit32.exe" %<CR>

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 在当前行的末尾添加当前的日期
" append current date at end of current line.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <silent> <F7> :r! date /t "+%Y/%m/%d"<CR>kJ
nmap <silent> <F8> :r! time /t <CR>kJ
"nmap <silent> <F9> :r! date /t "+%Y/%m/%d"<CR>kJ r! date /t <CR>kJ
imap <F9> <CR><Esc>:read !date /t <CR>kJ<ESC>:read !time /t <CR>kJ$a<ESC>J

nmap <silent> <leader>tsh :call SourceFileHeaderComment()<cr>
nmap <silent> <leader>thh :call CHeaderFileHeaderComment()<cr>
nmap <silent> <leader>tfc :call FunctionComment()<cr>
nmap <silent> <leader>fr :call FrameComment()<cr>2j$a
nmap <silent> <leader>s :call IncreaseString()<cr>
nmap <silent> <leader>spc :call SaveProjectConfig()<cr>
nmap <silent> <leader>lpc :call LoadProjectConfig()<cr>

" 菜单栏与工具栏隐藏与显示动态切换，使用功能键F2
map <silent> <F2> :if &guioptions =~# 'T' <Bar>
        \set guioptions-=T <Bar>
        \set guioptions-=m <bar>
    \else <Bar>
        \set guioptions+=T <Bar>
        \set guioptions+=m <Bar>
    \endif<CR>

"对选中的块添加#if0 #endif
map ;' mz'aO<Esc>i#if 0<Esc>'zo<Esc>i#endif<Esc>

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"                         缩写配置 abbreviation
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd FileType c,cpp iabbrev #i #include
autocmd FileType c,cpp iabbrev #d #define
iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr>

" Auto enable/disable input method when in/leave insert mode
autocmd InsertLeave * set imdisable | set iminsert=0
autocmd InsertEnter * set noimdisable | set iminsert=0

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"                             插件的配置与说明
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" taglist
" 同类插件还有：ttag tagbar tagmenu tagexplorer等
" 这个插件需要ctags程序，已经把这个程序放在vim目录下了。
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let Tlist_Exit_Only_Window = 1
nmap <silent> <leader>ta :Tlist<cr>
"let Tlist_Auto_Open = 1
let Tlist_Show_One_File=1

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" TxtBrowser (文本浏览器)
" 同类的插件还有：txtfmt
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let TxtBrowser_Title_Level = 4
au BufRead,BufNewFile *.txt setlocal ft=txt

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"netrw 
"文件浏览设置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:netrw_winsize = 30
nmap <silent> <leader>fe :Sexplore!<cr> 

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" VimIM
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"	:let g:vimim_onekey_hit_and_run=1	" 缺省，点石成金
"let g:vimim_onekey_hit_and_run=0	" 点石成金，连续
"	:let g:vimim_onekey_is_tab=0	" 缺省：
"let g:vimim_onekey_is_tab=1	" Tab也是点石键
"let g:vimim_onekey_is_tab=2	" 点石成金键是Tab
"	:let g:vimim_custom_label=1	" 缺省：显示标签
"	:let g:vimim_custom_menu=0	" 缺省：隐藏编码提示
"	:let g:vimim_custom_color=1	" 缺省颜色
"let g:vimim_custom_color=2	" 关闭菜单颜色显示
"let g:vimim_custom_color=0	" 彻底关闭颜色选项
"	:let g:vimim_shuangpin=0	" 缺省无双拼
"let g:vimim_shuangpin='abc'	" 双拼：智能ABC
"let g:vimim_shuangpin='ms'	" 双拼：微软
"let g:vimim_shuangpin='nature'	" 双拼：自然码
"let g:vimim_shuangpin='plusplus'	" 双拼：拼音加加
"let g:vimim_shuangpin='purple'	" 双拼：紫光
"let g:vimim_shuangpin='flypy'	" 双拼：小鹤
"	:let g:vimim_cloud_qq=0	" 缺省：QQ云输入
"	:let g:vimim_cloud_baidu=0	" 缺省：百度云输入
"	:let g:vimim_cloud_google=0	" 缺省：谷歌云输入
"	:let g:vimim_cloud_sogou=0	" 缺省：搜狗云输入
"let g:vimim_cloud_sogou=888	" 缺省：想云就云
"let g:vimim_cloud_sogou=-1	" 彻底关闭云输入
"let g:vimim_cloud_sogou=8	" 每输入8字就激活
"	:let g:vimim_loop_pageup_pagedown=1	" 缺省：翻页循环
"let g:vimim_loop_pageup_pagedown=0	" 翻页不循环
"	:let g:vimim_digit_4corner=0	" 缺省：五笔画
"let g:vimim_digit_4corner=1	" 四角号码
"	:let g:vimim_chinese_input_mode='dynamic'	" 缺省：动态输入
"let g:vimim_chinese_input_mode='static'	" 静态输入
"	:let g:vimim_ctrl_space_to_toggle=1	" 用 ctrl+space 开关输入法
"	:let g:vimim_ctrl_h_to_switch=1	" 用 ctrl+h 切换输入法
"	:let g:vimim_use_cache=0	" 缺省，不用缓存
"let g:vimim_use_cache=1	" 使用缓存
"	:let g:vimim_latex_suite=0	" 缺省：
"let g:vimim_latex_suite=1	" 不转换单双引号
"	:let g:vimim_data_file=0	" 缺省：
"	:let g:vimim_data_directory=0	" 缺省：
"	:let g:vimim_hjkl_directory=0	" 缺省是 plugin/
"	:let g:vimim_debug=0	" 缺省：
"	:let g:vimim_imode_pinyin=0	" 缺省：自动设置
"	:let g:vimim_backslash_close_pinyin=0	" 缺省：
"	:let g:vimim_chinese_punctuation=1	" 缺省：显示全角
"	:let g:vimim_search_next=1	" 缺省：开启
"	:let g:vimim_more_candidates=0	" 缺省：
"	:let g:vimim_more_candidates=5	" 每输入5字就激活
"	:let g:vimim_data_file_encoding=0	" 缺省： utf8
"let g:vimim_data_file_encoding='chinese'	" 词库编码是chinese
"“自己的云”样本URL

"	:let g:vimim_cloud_mycloud = 0 " default
"	:let g:vimim_cloud_mycloud = "dll:/data/libvimim.so:192.168.0.1"
"	:let g:vimim_cloud_mycloud = "dll:/home/im/plugin/libmyplugin.so:arg:func"
"	:let g:vimim_cloud_mycloud = "dll:".$HOME."/plugin/libvimim.so"
"	:let g:vimim_cloud_mycloud = "dll:".$HOME."/plugin/cygvimim.dll"
"	:let g:vimim_cloud_mycloud = "app:".$VIM."/src/mycloud/mycloud"
"	:let g:vimim_cloud_mycloud = "app:python d:/mycloud/mycloud.py"
"	:let g:vimim_cloud_mycloud = "http://pim-cloud.appspot.com/ms/"
"	:let g:vimim_cloud_mycloud = "http://pim-cloud.appspot.com/abc/"
"	:let g:vimim_cloud_mycloud = "http://pim-cloud.appspot.com/qp/"
"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Tagbar
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <silent> <leader>tb :TagbarToggle<CR>
let g:tagbar_ctags_bin = 'ctags'
let g:tagbar_width = 27
let g:tagbar_sort = 0

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"  mini buffer 插件配置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"let g:miniBufExplMapWindowNavVim = 1
"let g:miniBufExplMapWindowNavArrows = 1
"let g:miniBufExplMapCTabSwitchBufs = 1
"let g:miniBufExplModSelTarget = 1

"=============================================================================
"			保存项目配置的模板，通常这个文件命名为Sessionx.vim
"=============================================================================

"set tags=tags
"set path+=[项目的路径，最好是绝对路径]

"=============================================================================
"			echofunc插件
"=============================================================================
"
"＋简介＋
"	
"	在命令行上显示c/c++的函数原型，支持ctags支持的其他语言。
"
"＋安装＋
"
"	1。把echofunc.vim放到/plugin目录下
"	2。用下面的命令创建标签文件，包括语言和签名域。
"
"＋用法＋
"	
"	当你在插入模式下在一个函数名后键入左括号“（”字符时，函数的原型声明将自动
"地显示在命令行上，同时你可以使用<Alt+->和<Alt+=>（通过EchoFuncKeyPrev和
"EchoFuncKeyNext来配置）在函数原型之间循环的切换（如果存在）。
"	另一个特性是提供了当鼠标光标停留在一个函数名称，宏名等上时，弹出一个气球提
"示，这个功能需要在编译Vim时加上ballon_eval功能选项。
"
"＋配置＋
"	g:EchoFuncLangDict
"	g:EchoFuncLangsUsed //let g:EchoFuncLangsUsed = ["C"]
"	g:EchoFuncMaxBalloonDeclaraions
"	g:EchoFuncKeyNext   //='<M-=>'
"	g:EchoFuncKeyPrev   //='<M-->'
"	基本上使用默认配置就可以了。
"
"================================================================================
"			lookupfile插件
"================================================================================
"
"＋简介＋
"
"	lookupfile打开文件非常简单的方法，通过键入模式表示你要查找的文件，从当前Vim
"会话中打开的下来列表中选择文件。它提供一致的接口来查找多种类型的文件（标签，路径
"，缓冲区，外部工具等）。它用于新版的Vim7的插入模式自动完成机制来显示匹配文件，它
"是一个新的工具。
"	插件默认的功能是从标签文件中查找文件名，	
"	
"＋安装＋
"
"＋用法＋
"	
"	查找一个文件，按下指定的按键（默认为F5）或使用LookupFile命令。这将在当前窗
"口上打开一个小窗口，在这个小窗口里你可以键入一个正则表达式，这样匹配的文件名将
"出现在Vim7的自动完成列表里。选择一个匹配的文件并按下回车键将在前一个窗口中打开
"这个文件
"
"
"=============================================================================

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" pathogen 管理插件的插件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
call pathogen#infect()

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CSyntaxAfter,高亮类C语言的操作符(+ - / * = <> () and others)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd! BufRead,BufNewFile,BufEnter *.{c,cpp,h,javascript} call CSyntaxAfter()

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"nerdtree
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <F3> :NERDTreeToggle<CR>

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 状态栏配置，显示字节数，列数，行数，当前行列，状态栏背景色等信息。
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set laststatus=2 "总是显示状态条
set statusline=%2*%m%r%h%w%*%F\ %1*[FORMAT=%2*%{&ff}:%{&fenc!=''?&fenc:&enc}%1*]\ [TYPE=%2*%Y%1*]\ [COL=%2*%03v%1*]\ [ROW=%2*%03l%1*/%3*%L(%p%%)%1*]\ [OFFSET=%2*%O%1*(%3*%B%1*)]\ [CWD=%r%{getcwd()}%h]
hi User1 guifg=gray
hi User2 guifg=red
hi User3 guifg=white
hi statusline guibg=green

au InsertEnter * hi statusline guibg=peru 
au InsertLeave * hi statusline guibg=green guifg=black

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" DoxygenToolkit.vim QT style
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:DoxygenToolkit_briefTag_pre="\\brief "
let g:DoxygenToolkit_paramTag_pre="\\param[in] "
let g:DoxygenToolkit_returnTag="\\return "
let g:DoxygenToolkit_fileTag="\\file "
let g:DoxygenToolkit_authorTag = "\\author "
let g:DoxygenToolkit_dateTag = "\\date "
let g:DoxygenToolkit_versionTag = "\\version "
let g:DoxygenToolkit_blockTag = "\\name "
let g:DoxygenToolkit_classTag = "\\class "
let g:DoxygenToolkit_startCommentTag="/*! "
let g:DoxygenToolkit_authorName="llxwj"
